package com.fuss.activitytest.launchmode

import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.fuss.activitytest.utils.ActivityCollector

/**
 * <pre>
 *     author : Mr.Fu
 *     e-mail : 18622268981@163.com
 *     time   : 2021/07/25
 *     desc   : 所有 Activity 的基类
 *     version: 1.0
 * </pre>
 */
abstract class BaseActivity : AppCompatActivity() {

    // 表示获取当前实例的 Class 对象，相当于 java 种的 getClass() 方法
    private val tag: String? = javaClass.simpleName
    // this.toString() 返回一个对象实例的字符串表示形式
    // 如：com.fuss.activitytest.SplashActivity@b644a35
    // objectString 只截取了 @之后的部分
    private var objectString = this.toString()
            .substring(this.toString().length - 8, this.toString().length - 1)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d(tag, "$objectString -> onCreate ---- taskId is  $taskId")
        setContentView(getLayoutResID())
        ActivityCollector.addActivity(this)
        initListener()
    }

    override fun onStart() {
        super.onStart()
        Log.d(tag, "$objectString -> onStart")
    }

    override fun onResume() {
        super.onResume()
        Log.d(tag, "$objectString -> onResume")
    }

    override fun onPause() {
        super.onPause()
        Log.d(tag, "$objectString -> onPause")
    }

    override fun onStop() {
        super.onStop()
        Log.d(tag, "$objectString -> onStop")
    }

    override fun onDestroy() {
        super.onDestroy()

        Log.e(tag, "$objectString-> onDestroy")
        ActivityCollector.removeActivity(this)
    }

    override fun onRestart() {
        super.onRestart()
        Log.d(tag, "$objectString -> onRestart")
    }

    /**
     * 跳转 Activity 界面
     */
    fun doStartActivity(activityCls: Class<*>) {

        val intent = Intent(this, activityCls)
        startActivity(intent)
    }

    // 获取界面布局 xml 的 id
    abstract fun getLayoutResID(): Int

    // 在这个方法添加监听事件的绑定操作
    abstract fun initListener()
}